home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Input 64
/
Input_64_87-08_1987_Verlag_Heinz_Weise_de.d64
/
assembler 2
< prev
next >
Wrap
Text File
|
2023-02-26
|
2KB
|
89 lines
;BASIC-Erweiterung Hex-Zahlen
;_
:chrget = $0073 ;Zeichen aus BASIC-Text lesen
:chrgot = $0079 ;letztes Zeichen nochmal lesen
:fctvec = $30a ;Vektor fuer Ausdruck auswerten
:tofac = $bc49 ;positive Integerzahl in FAC
org $801 ;Start am BASIC-Anfang
:next w basend ;Pointer auf Ende
:linnum w 1987 ;Zeilennummer
:sys b $9e ;Token fuer SYS
:adrs b "2070" ;Adresse im Klartext
:linend b 0 ;Kennzeichen fuer Zeilenende
:basend w 0 ;Kennzeichen fuer Programmende
s 2070-*
:init lda #<new ;BASIC-Anfang hinter
sta $2b ;Programm verlegen
lda #>new
sta $2c
lda fctvec ;zeigt Vektor schon
ldy fctvec+1 ;auf eigene Routine?
cmp #<function
bne biegen ;nein
cpy #>function
beq okay ;ja, dann so lassen
sta rueck+1 ;sonst retten
sty rueck+2
:biegen lda #<function ;und auf eigene
sta fctvec ;Routine verbiegen
lda #>function
sta fctvec+1
:okay jsr $a659 ;RESTORE
jmp $a7ae ;RUN
;Hier beginnt die Hex-Eingabe-Routine
;_
:function jsr chrget ;Zeichen holen
cmp #'$ ;Kennzeichen fuer Hex
beq hexin
ldx $7a ;sonst CHRGET-Pointer
bne nodec ;wiederherstellen
dec $7b
:nodec dec $7a
:rueck jmp $ae86 ;und zur alten Adtresse
:hexin lda #$00
sta $0d ;Ergebnis wird numerisch
sta argu ;loeschen
sta argu+1
:mloop jsr chrget;naechstes Zeichen
cmp #'0
bcc raus ;kleiner als Ziffern
cmp #'9+1
bcc add ;Ziffer
cmp #'a
bcc raus ;kein Buchstabe
cmp #'f+1
bcs raus ;keine Hex-Ziffer
sec
sbc #7 ;Offset fuer a
:add and #$0f ;unteres Nibble maskieren
ldx #4 ;vier Bits
:adlop asl argu ;links-schieben
rol argu+1
dex
bne adlop
ora argu ;gelesene Ziffer addieren
sta argu
jmp mloop ;naechstes Zeichen
:raus lda argu+1
ldy argu
sta $62 ;fuer TOFAC
sty $63
ldx #$90 ;auch fuer TOFAC
sec
jmp tofac
:argu w 0
:ende b 0
:new w 0